Skip to content

fix: cross-lingualer Recall + typ-bewusste Dedup + Body-Redundanz-Flag#66

Merged
TillQuandel merged 2 commits into
masterfrom
fix/crosslingual-recall-typeaware-dedup
Jun 24, 2026
Merged

fix: cross-lingualer Recall + typ-bewusste Dedup + Body-Redundanz-Flag#66
TillQuandel merged 2 commits into
masterfrom
fix/crosslingual-recall-typeaware-dedup

Conversation

@TillQuandel

Copy link
Copy Markdown
Owner

Funde aus dem Ebner/Gegenfurtner-2019-Schwachstellen-Audit (englische Meta-Analyse durch die generative Pipeline). Zwei Commits, vier Befunde — alle deterministisch, TDD, CI-äquivalente Vollsuite grün (4695 passed).

#1 — Sprachblinder Halluzinations-Filter (commit 31a4cb4)

filter_hallucinated verwarf Konzepte über wörtlichen Token-Overlap zwischen Titel und Volltext. Deutscher Prompt/Vault + englische Quelle → der Kernbefund ("Lern-Zufriedenheits-Dissoziation") hatte Coverage 0 und wurde still gelöscht. Fix: cross-lingualer OR-Rettungsanker über multilinguale Satz-Embeddings (MAX-Cosine, fail-open, ENV-Schwelle ATOMIC_AGENT_TITLE_PRESENCE_COSINE=0.50). Greift nur wenn der lexikalische Check ablehnt — kann retten, nie zusätzlich verwerfen.

#2a — Typ-blinder Dedup-Pool (commit 31a4cb4)

build_existing_concepts indexierte alle Note-Typen → eine Konzept-Note wurde als Duplikat ihrer eigenen type: literature-Note geflaggt (koexistieren per Vault-Design). Fix: is_dedup_eligible (literature/moc/merge-stub) gated den Dup-Entscheid + Merge-Lookup. related-Links über Typgrenzen bleiben erlaubt.

#2b — extend_path ungelesen bei Vault-Dup mit abweichendem Titel (commit 31a4cb4)

write_note matchte nur Titel/Alias gegen den Vault-Index, nie extend_path. Fix: write_note honoriert extend_path jetzt als Merge-Ziel (typ-sicher via resolve_vault_relpath + is_dedup_eligible).

#8 — Body-Redundanz zwischen distinkten Geschwister-Notes (commit cfaf4fa)

Zwei distinkte Konzept-Notes eines Laufs können Body-Cosine 0.967 haben (Extractor re-deriviert geteilten Kontext paraphrasiert). Zwei empirische Gates zeigten: weder mergebar (distinkte Konzepte) noch satz-strippbar (exakt 0/10 gemeinsame Sätze, fuzzy≥0.93 nur 1/10). Lösung: flag_redundant_siblings() markiert nach den Dedup-Stages und vor dem Writer beide Notes mit einem seiteneffekt-freien quality_flag (Review-Hinweis) bei Body-Cosine ≥ ATOMIC_AGENT_REDUNDANT_SIBLING_COSINE (Default 0.90). Kein Merge, kein Strip.

Tests

  • Neue Test-Files: test_planner_hallucination_filter.py, test_typeaware_dedup.py, test_redundant_sibling_flag.py
  • CI-äquivalent (pytest generative lib/decision_engine/tests): 4695 passed, 3 skipped, 0 failures
  • Cross-Model-Review (Codex) auf Bilder/Diagramme aus PDF extrahieren und in Notes einbetten #8: Empty-Body-Guard + slow-Marker übernommen

🤖 Generated with Claude Code

Tilltime added 2 commits June 23, 2026 20:58
Drei gekoppelte Fixes aus dem Ebner-Live-Lauf (englische Meta-Analyse durch die
generative Pipe), je TDD + Mistral-Cross-Review:

#1 planner.filter_hallucinated war sprachblind: der reine Token-Coverage-Filter
gegen den Volltext verwarf deutsche (paraphrasierte) Konzept-Titel einer
englischen Quelle mit null Overlap -- inkl. des Paper-Kernbefunds
"Lern-Zufriedenheits-Dissoziation". Neu: cross-lingualer semantischer
OR-Rettungsanker (max-cosine Titel-vs-Saetze, multilinguales MiniLM; Schwelle
0.50 gemessen: echte Konzepte 0.575-0.825 vs. Halluzinationen 0.357/0.358).
Reiner OR-Kanal -- kann nur retten, nie zusaetzlich verwerfen.

#2a typ-bewusstes Dedup-Blocking: literature/moc/merge-stub koexistieren per
Vault-Design mit Konzept-Notes und sind keine Dup-/Merge-Kandidaten. Verhindert
den False Positive "Konzept-Note ist Duplikat ihrer eigenen Lit-Note".
related-Links ueber Typgrenzen bleiben erlaubt (Konzept soll auf Quelle linken).

#2b write_note honoriert extend_path jetzt typ-sicher als Merge-Ziel
(Konzept-Dup mit abweichendem Titel -> Merge-Stub statt Dublette; bisher
verpufftes cross_reference-Signal).

Review-Haertung: Stem-Kollision in resolve_vault_relpath (mehrdeutig -> None);
_SENT_EMB_CACHE-Deckel gegen unbounded growth (GUI/Batch).

Bekannte Grenze: fail-open bei kaputtem type-Frontmatter (= bisheriges Verhalten).

15 neue Tests, kanonische Suite 621 passed.
…ter-Notes

flag_redundant_siblings() markiert nach den Dedup-Stages (resolve_sibling_dups +
dedup_hub_subconcepts) und vor dem Writer zwei DISTINKTE create-Notes EINES Laufs mit
Body-Cosine >= REDUNDANT_SIBLING_COSINE_THRESHOLD (Default 0.90) per quality_flag auf
beide ("hohe Ueberlappung mit [[Sibling]] — beim Review Kontext kuerzen/verlinken").

Zwei empirische Gates (Ebner-Audit) zeigten: solche Geschwister sind weder mergebar
(distinkte Konzepte) noch satz-strippbar (Redundanz paraphrasiert: exakt 0/10, fuzzy>=0.93
nur 1/10 Saetze). Der einzige verlustfreie nachgelagerte Umgang ist ein seiteneffekt-freier
Review-Hinweis — kein Merge, kein Strip, kein Body-Eingriff.

- generative/config.py: REDUNDANT_SIBLING_COSINE_THRESHOLD (ENV-ueberschreibbar)
- generative/orchestrator.py: flag_redundant_siblings() + Einhaengen in die Pipeline
- generative/tests/test_redundant_sibling_flag.py: 7 Tests (6 deterministisch via
  body_cosine_fn-Injection, 1 slow mit echtem Modell)

Cross-Model-Review (Codex): Empty-Body-Guard + slow-Marker uebernommen; pytest.ini-Befund
als CI-False-Positive verifiziert (CI uebergibt 'generative' positional, ueberschreibt
testpaths).
@TillQuandel TillQuandel merged commit 7fc2f86 into master Jun 24, 2026
2 checks passed
@TillQuandel TillQuandel deleted the fix/crosslingual-recall-typeaware-dedup branch June 24, 2026 12:12
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants